import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.nacos.common.utils.MD5Utils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.util.Base64Utils;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.*;

public class GmSignUtil {
    private static final String encoding = "UTF-8";
    private static final String AES_CBC_PKC_ALG = "AES/CBC/PKCS5Padding";
    private static final byte[] AES_IV = initIV(AES_CBC_PKC_ALG);
    private static final String RSA_ECB_PKCS1 = "RSA/ECB/PKCS1Padding";

    /**
     * 加密算法RSA
     */
    public static final String KEY_ALGORITHM = "RSA";
    /**
     * 签名算法 SHA256WithRSA
     */
    public static final String SIGNATURE_ALGORITHM = "SHA256WithRSA";

    /**
     * 签名算法 SHA1WithRSA
     */
    public static final String SIGNATURE_ALGORITHM_SHA1 = "SHA1WithRSA";

    /**
     * 商户编码
     */
    public static final String MERCHANT_CODE = "guomeijinrong";
    /**
     * 商户渠道号
     */
    public static final String MERCHANT_CHANNELID = "guomeijinrong01";
    /**
     * 版本号
     */
    public static final String MERCHANT_VERSION = "1.0";
    /**
     * 公钥
     */
    public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFxcCd0Js7QJoF7j3tz3QkhCDKDZlTTvkWwcKNfoUe3dFX6s7EbEM9ZRIXy6a1OQbG9kHyIQIM7kvDh+cy2Au3kn3XbnXG0NivQhVtMwTJfNT+VnfmsgmiQuu9IaAMj+0oH/i3EAHnowjIvYOoX5edoFe8+uO6Q4gdDDTMfh5OjQIDAQAB";
    /**
     * 私钥
     */
    public static final String PRIVATE_KEY = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMXFwJ3QmztAmgXuPe3PdCSEIMoNmVNO+RbBwo1+hR7d0VfqzsRsQz1lEhfLprU5Bsb2QfIhAgzuS8OH5zLYC7eSfddudcbQ2K9CFW0zBMl81P5Wd+ayCaJC670hoAyP7Sgf+LcQAeejCMi9g6hfl52gV7z647pDiB0MNMx+Hk6NAgMBAAECgYB2Hd4lIuKjJ7kVk61O65ic+oCuzCJnfAIOUliEsyyEO8x8qpMlAtfBwixlI88D6vQePhMyrf4QhP2g4Pj3B8suoXBP0miuRTq+WSs3uQSPJwgi47sdZ6PpQB6kKtSgwBCBSajnA+e3vlSNAwCLeUK7FYQ/3we5dy4hle4jcJQqTQJBAPMFB/jpFQSzOR3N8N9Vx26GgutmzqnGrFJCFxgZPKoesPusrH+jCEUs0nlUgNoMPnlT78fZ88yyhZvk3boOpS8CQQDQVgbLE2q8aO+DdyCGBGLTGbiDdMNUE5NobPo5DrS2BS/lQJj7z/qbeZWxYUirgquuP+s85AiYamolSdj+mdEDAkEAoYp6ni7x1cn88Z7vusWeaA3qAOi5/4kdCyD7kP1Vog/8vY8uqzmISdNdpWFStZ7l+GifP03WDf+taM9dxEvv6QJAUA6+zYrImV45q+s7NES7NSPNI7ba2JQtMROvk/1ys/+KSC5qm1lwlA5E18Tqh/3Ou0cUvnFiXC+IWovmNvAkwQJAI3+O82wzsFcdP3TGHJU+uPBqofQNWcp2MHIeJpLk/bicwMjKPtsarmyjpNZCVZiYHhn253QOyFUI12lqEsgcWw==";

    static class RequestParams {
        private String respData;
        private Map<String, String> reqHead = new HashMap<>();

        public String getRespData() {
            return respData;
        }

        public void setRespData(String respData) {
            this.respData = respData;
        }

        public Map<String, String> getReqHead() {
            return reqHead;
        }

        public void setReqHead(Map<String, String> reqHead) {
            this.reqHead = reqHead;
        }
    }

    public static String httpPost(String url, RequestParams requestParams) throws Exception {
        CloseableHttpClient client = null;
        HttpResponse resp = null;
        try {
            // 通过址默认配置创建一个httpClient实例
            client = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            String respContent = null;
            httpPost.setEntity(new StringEntity(requestParams.getRespData(), "utf-8"));
            Map<String, String> headers = requestParams.getReqHead();
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                httpPost.setHeader(entry.getKey(), entry.getValue());
            }

            resp = client.execute(httpPost);
            if (resp == null) {
                return null;
            }
            if (resp.getStatusLine().getStatusCode() == 200) {
//                logger.info("请求成功，请求码={}", resp.getStatusLine().getStatusCode());
                HttpEntity he = resp.getEntity();
                respContent = EntityUtils.toString(he, "UTF-8");
            } else {
//                logger.error("请求失败，请求码={}", resp.getStatusLine().getStatusCode());
                return null;
            }
            return respContent;
        } catch (Exception e) {
//            logger.error(url + "请求失败：{}", e);
            throw e;
        } finally {
            if (null != resp) {
                try {
                    ((CloseableHttpResponse) resp).close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 关闭资源
            if (null != client) {
                try {
                    client.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 验证签名
     *
     * @param data
     * @param publicKey
     * @param sign
     * @return
     * @throws Exception
     */
    public static boolean verify(byte[] data, String publicKey, String sign)
            throws Exception {
        byte[] keyBytes = Base64Utils.decode(publicKey.getBytes(encoding));
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PublicKey publicK = keyFactory.generatePublic(keySpec);
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
        signature.initVerify(publicK);
        signature.update(data);
        return signature.verify(Base64Utils.decode(sign.getBytes(encoding)));
    }

    /**
     * aes解密
     *
     * @param content  待解密内容
     * @param password 解密密钥
     * @return
     */
    public static String decrypt4Base64(String content, String password) {
        try {
            byte[] byteContent = Base64Utils.decode(content.getBytes(encoding));
            byte[] enCodeFormat = password.getBytes(encoding);
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance(AES_CBC_PKC_ALG);// 创建密码
            cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(AES_IV));// 初始
            byte[] result = cipher.doFinal(byteContent);
            return new String(result, encoding); // 加密
        } catch (Exception e) {
        }
        return null;
    }

    /**
     * 加密内容
     *
     * @param reqData
     * @param key
     * @param privateKey
     * @param publicKey
     * @return
     * @throws Exception
     */
    public static RequestParams encryptReqMsg(String reqData, String key, String privateKey, String publicKey) throws Exception {
        // 请求报文按照默认顺序转json
        JSONObject reqJson = JSON.parseObject(reqData, Feature.OrderedField);

        RequestParams requestParams = new RequestParams();
        // 获取请求体
        JSONObject reqDataJson = reqJson.getJSONObject("respData");
        JSONObject reqHeadJson = reqJson.getJSONObject("reqHead");

        //RSA签名：使用私钥对请求体业务字段进行加签
        String sign = sign(reqDataJson.toJSONString().getBytes(Charset.forName("UTF-8")), privateKey);

        requestParams.getReqHead().put("signData", sign);
        // AES加密请求数据，用16位随机密钥key明文加密请求体reqData
        String AESreqData = encrypt4Base64(reqDataJson.toString(), key);
        requestParams.setRespData(AESreqData);
        // 使用公钥加密16位随机密钥key
        String randomKey = encryptByPublicKey4Pkcs5(key.getBytes(Charset.forName("UTF-8")), publicKey);
        requestParams.getReqHead().put("randomKey", randomKey);

        Set<Map.Entry<String, Object>> entries = reqHeadJson.entrySet();
        for (Map.Entry<String, Object> entry : entries) {
            requestParams.getReqHead().put(entry.getKey(), String.valueOf(entry.getValue()));
        }
        // 最终请求报文
        return requestParams;
    }



    /**
     * aes加密
     *
     * @param content  加密的内
     * @param password 加密密码
     * @return
     */
    public static String encrypt4Base64(String content, String password) {
        try {
            byte[] bytePwd = password.getBytes(encoding);
            SecretKeySpec key = new SecretKeySpec(bytePwd, "AES");
            Cipher cipher = Cipher.getInstance(AES_CBC_PKC_ALG);// 创建密码
            byte[] byteContent = content.getBytes(encoding);
            cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(AES_IV));// 初始
            byte[] result = cipher.doFinal(byteContent);
            return new String(Base64Utils.encode(result)); // 加密
        } catch (Exception e) {
        }
        return null;
    }

    /**
     * rsa解密
     *
     * @param privateKey rsa私钥
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String decryptByPrivateKey4Pkcs5(byte[] content, String privateKey) throws UnsupportedEncodingException {
        Cipher c = null;
        byte[] decryptedData = null;
        try {
            byte[] priByte = Base64Utils.decode(privateKey.getBytes(encoding));

            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(priByte);
            KeyFactory keyF = KeyFactory.getInstance("RSA");
            RSAPrivateKey pk = (RSAPrivateKey) keyF.generatePrivate(keySpec);

            c = Cipher.getInstance(RSA_ECB_PKCS1);
            c.init(Cipher.DECRYPT_MODE, pk);

            byte[] contentB = Base64Utils.decode(new String(content, encoding).getBytes(encoding));
            int inputLen = contentB.length;
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            int offSet = 0;
            byte[] cache;
            int i = 0;
            while (inputLen - offSet > 0) {
                if (inputLen - offSet > 128) {
                    cache = c.doFinal(contentB, offSet, 128);
                } else {
                    cache = c.doFinal(contentB, offSet, inputLen - offSet);
                }
                out.write(cache, 0, cache.length);
                i++;
                offSet = i * 128;
            }
            decryptedData = out.toByteArray();
            out.close();

        } catch (Exception e) {
            return null;
        }
        return new String(decryptedData, encoding);
    }

    /**
     * 公钥加密
     *
     * @param data      源数
     * @param publicKey 公钥(BASE64编码)
     * @return
     * @throws Exception
     */
    public static String encryptByPublicKey4Pkcs5(byte[] data, String publicKey)
            throws Exception {
        byte[] keyBytes = Base64Utils.decode(publicKey.getBytes(encoding));
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        RSAPublicKey publicK = (RSAPublicKey) keyFactory.generatePublic(x509KeySpec);
        // 对数据加密
        Cipher cipher = Cipher.getInstance(RSA_ECB_PKCS1);
        cipher.init(Cipher.ENCRYPT_MODE, publicK);
        int inputLen = data.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offSet = 0;
        byte[] cache;
        int i = 0;
        // 对数据分段加
        while (inputLen - offSet > 0) {
            if (inputLen - offSet > 128) {
                cache = cipher.doFinal(data, offSet, 128);
            } else {
                cache = cipher.doFinal(data, offSet, inputLen - offSet);
            }
            out.write(cache, 0, cache.length);
            i++;
            offSet = i * 128;
        }
        byte[] encryptedData = out.toByteArray();

        out.close();
        return new String(Base64Utils.encode(encryptedData));
    }

    public static String sign(byte[] data, String privateKey) throws Exception {
        byte[] keyBytes = Base64Utils.decode(privateKey.getBytes(encoding));
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
        signature.initSign(privateK);
        signature.update(data);
        return new String(Base64Utils.encode(signature.sign()));
    }

    /**
     * 随机数
     *
     * @return
     */
    public static String getRandom() {
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i < 16; i++) {
            sb.append("1234567890qwertyuiopasdfghjklzxcvbnm".charAt(random
                    .nextInt("1234567890qwertyuiopasdfghjklzxcvbnm".length())));
        }
        return sb.toString();
    }

    public static Pair<String, String> genKeyPair() throws NoSuchAlgorithmException {
        // KeyPairGenerator类用于生成公钥和私钥对，基于RSA算法生成对象
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
        // 初始化密钥对生成器，密钥大小为96-1024位
        keyPairGen.initialize(1024, new SecureRandom());
        // 生成一个密钥对，保存在keyPair中
        KeyPair keyPair = keyPairGen.generateKeyPair();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   // 得到私钥
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();  // 得到公钥
        // 得到公钥字符串
        String publicKeyString = new String(Base64Utils.encode(publicKey.getEncoded()));
        // 得到私钥字符串
        String privateKeyString = new String(Base64Utils.encode((privateKey.getEncoded())));

        return Pair.of(privateKeyString, publicKeyString);
    }

    /**
     * 初始化向
     *
     * @param aesCbcPkcAlg
     * @return
     */
    private static byte[] initIV(String aesCbcPkcAlg) {
        Cipher cp;
        try {
            cp = Cipher.getInstance(aesCbcPkcAlg);
            int blockSize = cp.getBlockSize();
            byte[] iv = new byte[blockSize];
            for (int i = 0; i < blockSize; ++i) {
                iv[i] = 0;
            }
            return iv;

        } catch (Exception e) {
            int blockSize = 16;
            byte[] iv = new byte[blockSize];
            for (int i = 0; i < blockSize; ++i) {
                iv[i] = 0;
            }
            return iv;
        }
    }


    /**
     * 撞库
     *
     * @return
     */
    public static void testUjApplyDb() {
        try {
            Pair<String, String> pair = genKeyPair();
            String key = GmSignUtil.getRandom();
//            String randomKey = "hDa30fbKiasLabzqGcRWDPQRvXLd/QfBBXT1sGlO4t1st6JvKk7LPgCyHwwrl5OUHKXXzrlea4Q4wRh1Bo9+rwmbjYNJe9Ye+jExuQg+/oD6BipROVuBEceSHPlJf7n8O2rjyCC72XwjNr8/uuvvPun+QeLWd92ZfAeCpUQvc1I=";
            DateFormatUtils.format(new Date(), "yyyyMMdd");
            SortedMap<String, Object> treeHeadMaps = new TreeMap<>();
            treeHeadMaps.put("channelId", "guomeijinrong01");
            treeHeadMaps.put("code", "guomeijinrong");
            treeHeadMaps.put("time", "1722507030724");
            treeHeadMaps.put("version", "1.0");
//            String key = GmSignUtil.decryptByPrivateKey4Pkcs5(randomKey.getBytes(),GmSignUtil.PRIVATE_KEY);
            String randomKey = GmSignUtil.encryptByPublicKey4Pkcs5(key.getBytes(Charset.forName("UTF-8")), GmSignUtil.PUBLIC_KEY);

            treeHeadMaps.put("randomKey", randomKey);

            SortedMap<String, Object> treeBodyMaps = new TreeMap<>();

            //撞库参数
            treeBodyMaps.put("customerName", "张志丹");
            treeBodyMaps.put("idNo", "440902197911200069");
            String phoneNoMd5 = MD5Utils.md5Hex("15236633601", "UTF-8");
            treeBodyMaps.put("phoneNo", phoneNoMd5);


            Map<String, Object> map = new HashMap<>();
            map.put("reqHead", JSONObject.toJSONString(treeHeadMaps));
            map.put("respData", JSONObject.toJSONString(treeBodyMaps));

            String reqMsg = JSONObject.toJSONString(map);
            System.out.println("明文请求数据：reqMsg=" + reqMsg);
//            String key = "9parbm993zp3cyv2";


            //私钥
            String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAL0bI+h4COP1Rul7S1+2fl9PuVHINPfIHO+mRK+M3wOrd1nRJFxj7VEoiNc3VGjNa8yIOovtRpTQQbO1Edm5aqGhTyboVXnVeDoe22rTBxf6KfCBRR0NqjAa1DbtfUlrggLXZKkffZ3ujJlZX5YDUwiw8n5CzJtXT6xwmrG1o/lXAgMBAAECgYBrXyydQwJxRIQV776VQs4wGdk0WUPR6Jqda7+WGZtKvyHOKpTFrKtDqItB/5V6yCBMCpGLf5bSygh0G/xdrgyfbNmv44psYRQPgeFdQSFfO7OfhXy791p3UcqhdwyqcEg17u2Dhojg1E3pRTS4txbI2+2h/70Hcq6nLuyyn0Dq2QJBAOo8FQo5h6xaKHk+oSpOyjUajGU1FDwrAJCL6tccPbcEgBCFuJ2aypE/hQf3khtLUTArfA57don+AwfzAh0DTVUCQQDOrYxNxzBSbw84A1ef9vRf5vboWKV7YX0EdYeF8jCis6qPpQClkzfh3heiGSPkLlNyZTwpxSzd9BCGQlZmwov7AkEA6Zk35nWPb/yOJrSmKDphgOpUH876ujKsontXnmXkynQrf87MWil4Ybi2ZEarqJrJgj+rvgm1I1N3FGNutR6I7QJBAIPdasU9L3GI9nbQexnO4MBHhoVb+cksvC0aJ6uoiKtmYo5fwnfh5CeyIfYEgEfX3toACVDFQwkh7WEb9jB+M/0CQFDycO42JHxFZao0DOdsXByXNd2YRMb/cdTdi4CiUA7Jb+bk/lk40ltty9vZPNugtRkhXB+ocHGsnBRu8BIYkuI=";
            //公钥
            String publicKey = GmSignUtil.PUBLIC_KEY;

            RequestParams requestParams = encryptReqMsg(reqMsg, key, privateKey, publicKey);


            System.out.println("加密加签后的请求数据：encryReqData=" + JSONObject.toJSONString(requestParams));

            //开始发起http请求
            //httpPost("http://xxxxxx",requestParams) 调用

            System.out.println("---------------开始对上面加密的数据解密和验证签名-----------------");
            System.out.println("请求内容体---------------" + requestParams.getRespData());
            System.out.println("请求头---------------" + JSONObject.toJSONString(requestParams.getReqHead()));
            System.out.println("签名---------------" + requestParams.getReqHead().get("signData"));

            String randomKey1 = requestParams.getReqHead().get("randomKey");
            String decryptkey = GmSignUtil.decryptByPrivateKey4Pkcs5(randomKey1.getBytes(),GmSignUtil.PRIVATE_KEY);

            GmSignUtil guardUtil = new GmSignUtil();
            String decryptRspStr = new String(guardUtil.decrypt4Base64(requestParams.getRespData(), decryptkey));
            System.out.println("解密结果为：" + decryptRspStr);


            //验签，获取响应签名值
            String sign = requestParams.getReqHead().get("signData");
//            System.out.println("sign:" + sign);

            // rspData验签
            boolean flag = verify(decryptRspStr.getBytes(Charset.forName("UTF-8")), "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9GyPoeAjj9Ubpe0tftn5fT7lRyDT3yBzvpkSvjN8Dq3dZ0SRcY+1RKIjXN1RozWvMiDqL7UaU0EGztRHZuWqhoU8m6FV51Xg6Httq0wcX+inwgUUdDaowGtQ27X1Ja4IC12SpH32d7oyZWV+WA1MIsPJ+QsybV0+scJqxtaP5VwIDAQAB", sign);
            System.out.println("验签结果：flag=" + flag);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 进件
     *
     * @return
     */
    public static void testUjApplyUrl() {
        try {
            Pair<String, String> pair = genKeyPair();
            String key = GmSignUtil.getRandom();
//            String randomKey = "hDa30fbKiasLabzqGcRWDPQRvXLd/QfBBXT1sGlO4t1st6JvKk7LPgCyHwwrl5OUHKXXzrlea4Q4wRh1Bo9+rwmbjYNJe9Ye+jExuQg+/oD6BipROVuBEceSHPlJf7n8O2rjyCC72XwjNr8/uuvvPun+QeLWd92ZfAeCpUQvc1I=";
            DateFormatUtils.format(new Date(), "yyyyMMdd");
            SortedMap<String, Object> treeHeadMaps = new TreeMap<>();
            treeHeadMaps.put("channelId", "guomeijinrong01");
            treeHeadMaps.put("code", "guomeijinrong");
            treeHeadMaps.put("time", "1722507030724");
            treeHeadMaps.put("version", "1.0");
//            String key = GmSignUtil.decryptByPrivateKey4Pkcs5(randomKey.getBytes(),GmSignUtil.PRIVATE_KEY);
            String randomKey = GmSignUtil.encryptByPublicKey4Pkcs5(key.getBytes(Charset.forName("UTF-8")), GmSignUtil.PUBLIC_KEY);

            treeHeadMaps.put("randomKey", randomKey);

            SortedMap<String, Object> treeBodyMaps = new TreeMap<>();

            //进件参数
            treeBodyMaps.put("applyLmt", 7500.00);
            JSONObject applicationDto = new JSONObject();

            List<JSONObject> list = new ArrayList();
            JSONObject linkman1 = new JSONObject();
            linkman1.put("name", "测试姓名张磊");
            linkman1.put("phone", "19000000000");
            linkman1.put("relation", "C");
            linkman1.put("relationLevel", "2");
            list.add(linkman1);

            JSONObject linkman2 = new JSONObject();
            linkman2.put("name", "测试姓名张磊");
            linkman2.put("phone", "18000000000");
            linkman2.put("relation", "S");
            linkman2.put("relationLevel", "1");
            list.add(linkman2);

            applicationDto.put("linkmanList", list);
            applicationDto.put("education", "high");
            applicationDto.put("occupation", "F");
            applicationDto.put("companyNature", "F");
            applicationDto.put("nation", "汉");
            applicationDto.put("loanUsage", "PN07");
            applicationDto.put("companyName", "张磊测试地址");
            applicationDto.put("idCardBank", "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");
            applicationDto.put("idNo", "440902197911200069");   // 身份证号
            applicationDto.put("phoneNo", "15236633601");       // 手机号码
            applicationDto.put("liveCity", "西安市张磊家");
            applicationDto.put("liveProvinceCode", "510000");
            applicationDto.put("idEffectDate", "156277440000");
            applicationDto.put("idDueDate", "2193926400000");
            applicationDto.put("idType", "1");
            applicationDto.put("liveAddress", "西安市高新区张磊家");
            applicationDto.put("bankCardNo", "61223131321231231");
            applicationDto.put("sex", "F");
            applicationDto.put("borrower", "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");
            applicationDto.put("liveProvince", "西安市张磊家");
            applicationDto.put("bankPhoneNo", "13112345678");
            applicationDto.put("interestRateType", "AR");
            applicationDto.put("customerName", "张志丹");        // 用户姓名
            applicationDto.put("liveCityCode", "610125");
            applicationDto.put("liveDistrict", "西安市张磊家");
            applicationDto.put("idCardFace", "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");
            applicationDto.put("photoType", "png");
            applicationDto.put("idCardAddress", "西安市高新区张磊家");
            applicationDto.put("maritalStatus", "2");
            applicationDto.put("liveDistrictCode", "110101");
            treeBodyMaps.put("applicationDto", applicationDto);

            treeBodyMaps.put("creditApplyNo", "GMROC12345678");
            treeBodyMaps.put("capitalCode", "F6000");

            Map<String, Object> map = new HashMap<>();
            map.put("reqHead", JSONObject.toJSONString(treeHeadMaps));
            map.put("respData", JSONObject.toJSONString(treeBodyMaps));

            String reqMsg = JSONObject.toJSONString(map);
            System.out.println("明文请求数据：reqMsg=" + reqMsg);
//            String key = "9parbm993zp3cyv2";


            //私钥
            String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAL0bI+h4COP1Rul7S1+2fl9PuVHINPfIHO+mRK+M3wOrd1nRJFxj7VEoiNc3VGjNa8yIOovtRpTQQbO1Edm5aqGhTyboVXnVeDoe22rTBxf6KfCBRR0NqjAa1DbtfUlrggLXZKkffZ3ujJlZX5YDUwiw8n5CzJtXT6xwmrG1o/lXAgMBAAECgYBrXyydQwJxRIQV776VQs4wGdk0WUPR6Jqda7+WGZtKvyHOKpTFrKtDqItB/5V6yCBMCpGLf5bSygh0G/xdrgyfbNmv44psYRQPgeFdQSFfO7OfhXy791p3UcqhdwyqcEg17u2Dhojg1E3pRTS4txbI2+2h/70Hcq6nLuyyn0Dq2QJBAOo8FQo5h6xaKHk+oSpOyjUajGU1FDwrAJCL6tccPbcEgBCFuJ2aypE/hQf3khtLUTArfA57don+AwfzAh0DTVUCQQDOrYxNxzBSbw84A1ef9vRf5vboWKV7YX0EdYeF8jCis6qPpQClkzfh3heiGSPkLlNyZTwpxSzd9BCGQlZmwov7AkEA6Zk35nWPb/yOJrSmKDphgOpUH876ujKsontXnmXkynQrf87MWil4Ybi2ZEarqJrJgj+rvgm1I1N3FGNutR6I7QJBAIPdasU9L3GI9nbQexnO4MBHhoVb+cksvC0aJ6uoiKtmYo5fwnfh5CeyIfYEgEfX3toACVDFQwkh7WEb9jB+M/0CQFDycO42JHxFZao0DOdsXByXNd2YRMb/cdTdi4CiUA7Jb+bk/lk40ltty9vZPNugtRkhXB+ocHGsnBRu8BIYkuI=";
            //公钥
            String publicKey = GmSignUtil.PUBLIC_KEY;

            RequestParams requestParams = encryptReqMsg(reqMsg, key, privateKey, publicKey);


            System.out.println("加密加签后的请求数据：encryReqData=" + JSONObject.toJSONString(requestParams));

            //开始发起http请求
            //httpPost("http://xxxxxx",requestParams) 调用

            System.out.println("---------------开始对上面加密的数据解密和验证签名-----------------");
            System.out.println("请求内容体---------------" + requestParams.getRespData());
            System.out.println("请求头---------------" + JSONObject.toJSONString(requestParams.getReqHead()));
            System.out.println("签名---------------" + requestParams.getReqHead().get("signData"));

            String randomKey1 = requestParams.getReqHead().get("randomKey");
            String decryptkey = GmSignUtil.decryptByPrivateKey4Pkcs5(randomKey1.getBytes(),GmSignUtil.PRIVATE_KEY);

            GmSignUtil guardUtil = new GmSignUtil();
            String decryptRspStr = new String(guardUtil.decrypt4Base64(requestParams.getRespData(), decryptkey));
            System.out.println("解密结果为：" + decryptRspStr);


            //验签，获取响应签名值
            String sign = requestParams.getReqHead().get("signData");
//            System.out.println("sign:" + sign);

            // rspData验签
            boolean flag = verify(decryptRspStr.getBytes(Charset.forName("UTF-8")), "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9GyPoeAjj9Ubpe0tftn5fT7lRyDT3yBzvpkSvjN8Dq3dZ0SRcY+1RKIjXN1RozWvMiDqL7UaU0EGztRHZuWqhoU8m6FV51Xg6Httq0wcX+inwgUUdDaowGtQ27X1Ja4IC12SpH32d7oyZWV+WA1MIsPJ+QsybV0+scJqxtaP5VwIDAQAB", sign);
            System.out.println("验签结果：flag=" + flag);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 授信查询
     *
     * @return
     */
    public static void testUjApplyStatusUrl() {
        try {
            Pair<String, String> pair = genKeyPair();
            String key = GmSignUtil.getRandom();
//            String randomKey = "hDa30fbKiasLabzqGcRWDPQRvXLd/QfBBXT1sGlO4t1st6JvKk7LPgCyHwwrl5OUHKXXzrlea4Q4wRh1Bo9+rwmbjYNJe9Ye+jExuQg+/oD6BipROVuBEceSHPlJf7n8O2rjyCC72XwjNr8/uuvvPun+QeLWd92ZfAeCpUQvc1I=";
            DateFormatUtils.format(new Date(), "yyyyMMdd");
            SortedMap<String, Object> treeHeadMaps = new TreeMap<>();
            treeHeadMaps.put("channelId", "guomeijinrong01");
            treeHeadMaps.put("code", "guomeijinrong");
            treeHeadMaps.put("time", "1722507030724");
            treeHeadMaps.put("version", "1.0");
//            String key = GmSignUtil.decryptByPrivateKey4Pkcs5(randomKey.getBytes(),GmSignUtil.PRIVATE_KEY);
            String randomKey = GmSignUtil.encryptByPublicKey4Pkcs5(key.getBytes(Charset.forName("UTF-8")), GmSignUtil.PUBLIC_KEY);

            treeHeadMaps.put("randomKey", randomKey);
            SortedMap<String, Object> treeBodyMaps = new TreeMap<>();

            //进件参数
            treeBodyMaps.put("creditApplyNo", "GMCMC24080518360740012");
//            treeBodyMaps.put("applyNo", "8454901956517513173");

            Map<String, Object> map = new HashMap<>();
            map.put("reqHead", JSONObject.toJSONString(treeHeadMaps));
            map.put("respData", JSONObject.toJSONString(treeBodyMaps));

            String reqMsg = JSONObject.toJSONString(map);
            System.out.println("明文请求数据：reqMsg=" + reqMsg);
//            String key = "9parbm993zp3cyv2";


            //私钥
            String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAL0bI+h4COP1Rul7S1+2fl9PuVHINPfIHO+mRK+M3wOrd1nRJFxj7VEoiNc3VGjNa8yIOovtRpTQQbO1Edm5aqGhTyboVXnVeDoe22rTBxf6KfCBRR0NqjAa1DbtfUlrggLXZKkffZ3ujJlZX5YDUwiw8n5CzJtXT6xwmrG1o/lXAgMBAAECgYBrXyydQwJxRIQV776VQs4wGdk0WUPR6Jqda7+WGZtKvyHOKpTFrKtDqItB/5V6yCBMCpGLf5bSygh0G/xdrgyfbNmv44psYRQPgeFdQSFfO7OfhXy791p3UcqhdwyqcEg17u2Dhojg1E3pRTS4txbI2+2h/70Hcq6nLuyyn0Dq2QJBAOo8FQo5h6xaKHk+oSpOyjUajGU1FDwrAJCL6tccPbcEgBCFuJ2aypE/hQf3khtLUTArfA57don+AwfzAh0DTVUCQQDOrYxNxzBSbw84A1ef9vRf5vboWKV7YX0EdYeF8jCis6qPpQClkzfh3heiGSPkLlNyZTwpxSzd9BCGQlZmwov7AkEA6Zk35nWPb/yOJrSmKDphgOpUH876ujKsontXnmXkynQrf87MWil4Ybi2ZEarqJrJgj+rvgm1I1N3FGNutR6I7QJBAIPdasU9L3GI9nbQexnO4MBHhoVb+cksvC0aJ6uoiKtmYo5fwnfh5CeyIfYEgEfX3toACVDFQwkh7WEb9jB+M/0CQFDycO42JHxFZao0DOdsXByXNd2YRMb/cdTdi4CiUA7Jb+bk/lk40ltty9vZPNugtRkhXB+ocHGsnBRu8BIYkuI=";
            //公钥
            String publicKey = GmSignUtil.PUBLIC_KEY;

            RequestParams requestParams = encryptReqMsg(reqMsg, key, privateKey, publicKey);


            System.out.println("加密加签后的请求数据：encryReqData=" + JSONObject.toJSONString(requestParams));

            //开始发起http请求
            //httpPost("http://xxxxxx",requestParams) 调用

            System.out.println("---------------开始对上面加密的数据解密和验证签名-----------------");
            System.out.println("请求内容体---------------" + requestParams.getRespData());
            System.out.println("请求头---------------" + JSONObject.toJSONString(requestParams.getReqHead()));
            System.out.println("签名---------------" + requestParams.getReqHead().get("signData"));

            String randomKey1 = requestParams.getReqHead().get("randomKey");
            String decryptkey = GmSignUtil.decryptByPrivateKey4Pkcs5(randomKey1.getBytes(),GmSignUtil.PRIVATE_KEY);

            GmSignUtil guardUtil = new GmSignUtil();
            String decryptRspStr = new String(guardUtil.decrypt4Base64(requestParams.getRespData(), decryptkey));
            System.out.println("解密结果为：" + decryptRspStr);


            //验签，获取响应签名值
            String sign = requestParams.getReqHead().get("signData");
//            System.out.println("sign:" + sign);

            // rspData验签
            boolean flag = verify(decryptRspStr.getBytes(Charset.forName("UTF-8")), "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9GyPoeAjj9Ubpe0tftn5fT7lRyDT3yBzvpkSvjN8Dq3dZ0SRcY+1RKIjXN1RozWvMiDqL7UaU0EGztRHZuWqhoU8m6FV51Xg6Httq0wcX+inwgUUdDaowGtQ27X1Ja4IC12SpH32d7oyZWV+WA1MIsPJ+QsybV0+scJqxtaP5VwIDAQAB", sign);
            System.out.println("验签结果：flag=" + flag);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }





    public static void main(String[] args) {
//        testUjApplyDb(); // 撞库
//        testUjApplyUrl(); // 进件
        testUjApplyStatusUrl(); //国美授信查询
    }
    public class UnionJointGuoMeiApiResponse {
        private String respData;
        private Map<String, String> reqHead = new HashMap<>();
        public String getRespData() {
            return respData;
        }

        public void setRespData(String respData) {
            this.respData = respData;
        }

        public Map<String, String> getReqHead() {
            return reqHead;
        }

        public void setReqHead(Map<String, String> reqHead) {
            this.reqHead = reqHead;
        }
    }


}


